package fr.syntheses.blog.Model.Listener;

import java.sql.Connection;
import java.sql.SQLException;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.sql.DataSource;

import org.apache.log4j.Logger;



public class ApplicationListener implements ServletContextListener{

	Context context=null;
	Connection cnx;
	Logger log = Logger.getLogger(ApplicationListener.class);
	
	//fonction appel�e lors de la cr�ation du lanceur
	public void contextInitialized(ServletContextEvent servletContextEvent) 
	{
		
		log.debug("<=============================== ===================================>");
		log.debug("<========Démarrade de l'appilication " + servletContextEvent.getServletContext().getContextPath() + "=====>");
		log.debug("<=============================== ===================================>");
		
		ServletContext servletContext=servletContextEvent.getServletContext();
		
		String dataSourceJNDI = servletContext.getInitParameter("dataSourceJNDI");
		
		try
		{
			context	= new InitialContext();
			
			DataSource dataSource = (DataSource)context.lookup(dataSourceJNDI);
			
			if(dataSource==null)
			{
				System.out.println("La dateSource n'a pu être construite. vérifiez présence de votre ressource !");
			}
			else
			{
				// test de la connexion !
				try {
					cnx = dataSource.getConnection();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				try {
					log.debug("La dasource a été récupérée avec succès, la connection est :" + !cnx.isClosed());
				} catch (SQLException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
				try {
					cnx.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
				// fin du test
				servletContext.setAttribute("dataSource", dataSource);
			}
			
		}
		catch(NamingException e)
		{
			throw new RuntimeException();
		}
		finally
		{
			try
			{
				//fermer le context
				if(context!=null)
				{
					context.close();
				}
			}
			catch(Exception e)
			{
				System.out.println("Erreur lors de initCtx !");
			}
		}
	}
	
	
	//fonction appel�e lors de la destruction du lanceur
	public void contextDestroyed(ServletContextEvent servletContextEvent)
	{
		
		log.debug("<=============================== ===================================>");
		log.debug("<========Rechargement de l'appilication " + servletContextEvent.getServletContext().getContextPath() + "=====>");
		log.debug("<=============================== ===================================>");
		try
		{
			//fermer le context
			if(context!=null)
			{
				context.close();
			}
		}
		catch(Exception e)
		{
			System.out.println("Erreur lors de initCtx !");
		}
	}
}
